home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / RCS / getgrent.c,v < prev    next >
Text File  |  1988-06-27  |  1KB  |  102 lines

  1. head     1.1;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.1
  9. date     88.06.27.11.40.59;  author ouster;  state Exp;
  10. branches ;
  11. next     ;
  12.  
  13.  
  14. desc
  15. @@
  16.  
  17.  
  18.  
  19. 1.1
  20. log
  21. @Initial revision
  22. @
  23. text
  24. @/*
  25.  * Warning:  this file was borrowed from 4.3 BSD and appears to be a
  26.  * derivative of AT&T code.  Do not distribute it to unlicensed
  27.  * parties.
  28.  */
  29.  
  30. #if defined(LIBC_SCCS) && !defined(lint)
  31. static char sccsid[] = "@@(#)getgrent.c    5.3 (Berkeley) 11/5/87";
  32. #endif LIBC_SCCS and not lint
  33.  
  34. #include <stdio.h>
  35. #include <grp.h>
  36.  
  37. #define    MAXGRP    200
  38.  
  39. static char *GROUP = "/etc/group";
  40. static FILE *grf = NULL;
  41. static char line[BUFSIZ+1];
  42. static struct group group;
  43. static char *gr_mem[MAXGRP];
  44.  
  45. setgrent()
  46. {
  47.     if( !grf )
  48.         grf = fopen( GROUP, "r" );
  49.     else
  50.         rewind( grf );
  51. }
  52.  
  53. endgrent()
  54. {
  55.     if( grf ){
  56.         fclose( grf );
  57.         grf = NULL;
  58.     }
  59. }
  60.  
  61. static char *
  62. grskip(p,c)
  63. register char *p;
  64. register c;
  65. {
  66.     while( *p && *p != c ) ++p;
  67.     if( *p ) *p++ = 0;
  68.     return( p );
  69. }
  70.  
  71. struct group *
  72. getgrent()
  73. {
  74.     register char *p, **q;
  75.  
  76.     if( !grf && !(grf = fopen( GROUP, "r" )) )
  77.         return(NULL);
  78.     if( !(p = fgets( line, BUFSIZ, grf )) )
  79.         return(NULL);
  80.     group.gr_name = p;
  81.     group.gr_passwd = p = grskip(p,':');
  82.     group.gr_gid = atoi( p = grskip(p,':') );
  83.     group.gr_mem = gr_mem;
  84.     p = grskip(p,':');
  85.     grskip(p,'\n');
  86.     q = gr_mem;
  87.     while( *p ){
  88.         if (q < &gr_mem[MAXGRP-1])
  89.             *q++ = p;
  90.         p = grskip(p,',');
  91.     }
  92.     *q = NULL;
  93.     return( &group );
  94. }
  95.  
  96. setgrfile(file)
  97.     char *file;
  98. {
  99.     GROUP = file;
  100. }
  101. @
  102.